package com.bitoon.basketdudes.web;

import com.bitoon.basketdudes.web.jpa.Equipo;
import com.bitoon.basketdudes.web.jpa.Jugador;

import java.util.*;
import javax.persistence.*;
import org.apache.log4j.Logger;

//public class Networks extends BaseAction {

// Extiendo de Index para que pille el Manager de la Semana y el Quinteto
public class Estadisticas extends BaseAction {

    private List<Jugador> estValoracion;
    private List<Jugador> estAnotacion;
    private List<Jugador> estRebotes;
    private List<Jugador> estAsistencias;
    private List<Jugador> estTapones;
    private List<Jugador> estRecuperaciones;

    private Equipo equipoValoracion;

    private Logger log = Logger.getLogger(Estadisticas.class);

    public String execute() {
        String retorno = SUCCESS;

        calcularAnotacion();
        calcularAsistencias();
        calcularRebotes();
        calcularRecuperaciones();
        calcularTapones();
        calcularValoracion();

        return retorno;
    }

    private void calcularValoracion() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY j.estadisticas.valoracionMedia DESC");
            q.setMaxResults(3);
            setEstValoracion((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    private void calcularAnotacion() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY (j.estadisticas.puntos*1.0 / j.estadisticas.partidos) DESC");
            q.setMaxResults(3);
            setEstAnotacion((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    private void calcularRebotes() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY ( (j.estadisticas.rebotesAtaque*1.0 + j.estadisticas.rebotesDefensa) / j.estadisticas.partidos) DESC");
            q.setMaxResults(3);
            setEstRebotes((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    private void calcularAsistencias() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY (j.estadisticas.asistencias*1.0 / j.estadisticas.partidos) DESC");
            q.setMaxResults(3);
            setEstAsistencias((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    private void calcularTapones() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY (j.estadisticas.tapones*1.0 / j.estadisticas.partidos) DESC");
            q.setMaxResults(3);
            setEstTapones((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    private void calcularRecuperaciones() {
        EntityManager em = null;

        try {
            em = emfBasket.createEntityManager();

            Query q = em.createQuery("SELECT j FROM Jugador j WHERE j.equipo!=null and j.estadisticas.partidos > 50 ORDER BY (j.estadisticas.robos*1.0 / j.estadisticas.partidos) DESC");
            q.setMaxResults(3);
            setEstRecuperaciones((List<Jugador>)q.getResultList());

        } catch (Exception e) {
            log.error("Estadisticas: ", e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }
    }

    public List<Jugador> getEstValoracion() {
        return estValoracion;
    }

    public void setEstValoracion(List<Jugador> estValoracion) {
        this.estValoracion = estValoracion;
    }

    public List<Jugador> getEstAnotacion() {
        return estAnotacion;
    }

    public void setEstAnotacion(List<Jugador> estAnotacion) {
        this.estAnotacion = estAnotacion;
    }

    public List<Jugador> getEstRebotes() {
        return estRebotes;
    }

    public void setEstRebotes(List<Jugador> estRebotes) {
        this.estRebotes = estRebotes;
    }

    public List<Jugador> getEstAsistencias() {
        return estAsistencias;
    }

    public void setEstAsistencias(List<Jugador> estAsistencias) {
        this.estAsistencias = estAsistencias;
    }

    public List<Jugador> getEstTapones() {
        return estTapones;
    }

    public void setEstTapones(List<Jugador> estTapones) {
        this.estTapones = estTapones;
    }

    public List<Jugador> getEstRecuperaciones() {
        return estRecuperaciones;
    }

    public void setEstRecuperaciones(List<Jugador> estRecuperaciones) {
        this.estRecuperaciones = estRecuperaciones;
    }


}
